import request from '@/utils/request';
import {getToken} from '@/utils/auth';


/**
 * 获取模型列表
 * @returns {Promise} 返回模型列表
 */
export function getModelList() {
  return request({
    url: `/ai/models`,
    method: 'get'
  });
}

/**
 * 发送聊天消息（流式响应）
 * 使用 fetch API 和 ReadableStream 来模拟 EventSource 的行为
 * @param {Object} params 请求参数
 * @param {string} params.model 模型名称
 * @param {string} params.message 消息内容
 * @param {Function} onMessage 消息回调函数
 * @param {Function} onError 错误回调函数
 * @param {Function} onComplete 完成回调函数
 */
export function sendChatMessage(params, onMessage, onError, onComplete) {
  const { model, message } = params;
  const token = getToken();

  fetch(import.meta.env.VITE_APP_BASE_API + `/ai/stream?model=${model}&message=${encodeURIComponent(message)}`, {
    headers: {
      'Authorization': `Bearer ${token}`
    }
  })
  .then(response => {
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    
    function read() {
      reader.read().then(({ done, value }) => {
        if (done) {
          onComplete && onComplete();
          return;
        }
        
        const chunk = decoder.decode(value, { stream: true });
        const lines = chunk.split('\n');
        
        for (const line of lines) {
          if (line.startsWith('data:')) {
            const data = line.substring(5).trim();
            if (data === '[DONE]') {
              onComplete && onComplete();
              return;
            }
            onMessage && onMessage(data);
          }
        }
        
        read();
      }).catch(error => {
        onError && onError(error);
      });
    }
    
    read();
  })
  .catch(error => {
    onError && onError(error);
  });
}